地图查询概述

最后更新时间:2019年7月5日

功能介绍

功能描述

对空间数据的管理、查询与分析能力是衡量GIS平台的一个重要依据,地图查询是地理信息系统应该具备的最基础的功能,主要包括从空间位置检索空间物体及其属性、从属性条件集检索空间物体。地图查询也是移动GIS应用中最常用的核心功能之一,广泛应用于各类项目中。通过空间和属性条件查询地理要素,提取所需要素的空间与属性信息,与地图联动,进行展示,满足应用的需求。

MapGIS平台将空间信息与属性信息集中管理,通过扩展的结构化空间查询语言实现查询功能,支持空间数据查询功能。基于GIS的特性,地图要素查询可以分为空间几何查询、属性条件查询以及两者结合的复合查询。其中,空间几何查询有点查询、矩形查询、多边形查询三种基本方式,在实际引用中通常以交互操作的空间范围为限定条件进行查询;属性查询以要素属性限定条件进行查询;复合查询则是两者的结合,空间范围组合属性条件,统一查询满足要求的空间要素。

在MapGIS移动端,由于数据可分为离线和在线数据,所以从数据角度可以将地图查询分为离线数据查询、在线数据查询两类,每一类又与空间、属性、复合三种查询类型组合对应。如下图所示:

地图查询分类.png

功能应用
1
点击查询

点击查询是空间条件查询一种,通过设置空间范围条件(即点几何图形),根据选择图层、范围条件对图层要素进行查询并显示查询结果。

2
矩形查询

矩形查询是空间条件查询一种,通过设置空间范围条件(即矩形),根据选择图层、范围条件对图层要素进行查询并显示查询结果。

3
多边形查询

多边形查询是空间条件查询一种,通过设置空间范围条件(即多边形),根据选择图层、范围条件对图层要素进行查询并显示查询结果。

4
属性查询

属性条件查询,即为属性关键字查询,根据选择图层、字段、关键字对图层要素进行查询并显示查询结果。

5
复合查询

复合条件查询,是属性条件与空间条件结合应用的查询方式,根据选择图层、字段、关键字,结合空间范围条件,对图层要素进行查询并显示查询结果。

功能接口

地图查询功能接口由MGSFeatureQuery(要素查询类)、MGSFeaturePagedResult(查询结果类)、MGSFeature(要素对象类)等提供。MGSFeatureQuery提供的查询核心接口(属性、方法)如下:

接口 适用情况
queryBound 查询范围
whereClause 属性查询条件
spatialRelationship 空间过滤条件
query 查询

然后重点关注MGSFeatureQuery的四个构造函数,如下表所示,适用的数据类型及应用场景都不同,根据具体情况选择对应的方法。

接口 适用数据 适用情况
initWithVectorLayer: 离线/在线 离线数据最常用方法
通过矢量图层构造查询对象
initWithIVectorCls: 离线 只提供.mgdb数据库时采用
通过矢量类对象构造查询对象
initWithIGServerBaseURL:dataURL: 在线 能够获取在线图层数据的URL地址时采用
initWithIGServerBaseURL:docName:mapID:layerID: 在线 能够获取到在线图层数据在地图文档中的ID时采用

下面来给出示例展示四种构造函数的用法:

(1) 通过矢量图层构造查询对象

//获取矢量图层
MGSVectorLayer *vectorLayer = (MGSVectorLayer *)[_mapView.map getLayerAtIndex:8];
//构造查询对象
MGSFeatureQuery *featureQuery=[[MGSFeatureQuery alloc] initWithVectorLayer:vectorLayer];    //参数:矢量图层

(2) 通过矢量类构造查询对象

//构造数据库对象
MGSDataBase *dataBase=[[MGSDataBase alloc] init];
//数据库离线本地路径
NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"/MapGIS Mobile 2D Sample/Map/MapEdit/武汉MKT.mgdb"];
//打开数据库
[dataBase open:dbPath];
//通过数据库初始化简单要素类
MGSSFeatureCls *featureCls=[[MGSSFeatureCls alloc] initWithDataBase:dataBase];
//打开要素图层
[featureCls openWithID:9];//从1开始
//构造查询对象
MGSFeatureQuery *featureQuery=[[MGSFeatureQuery alloc] initWithIVectorCls:featureCls];   //矢量类对象

(3) 根据在线图层的URL构造查询对象

//根据服务基地址、图层URL构造查询对象
MGSFeatureQuery *featureQuery=[[MGSFeatureQuery alloc] initWithIGServerBaseURL:@"http://develop.smaryun.com:6163/igs" dataURL:@"gdbp://MapGisLocal/武汉MKT/sfcls/自绘点"];

(4) 根据在线图层的ID构造查询对象

//根据服务基地址、地图文档名称、地图索引、图层索引构造查询对象
MGSFeatureQuery *featureQuery=[[MGSFeatureQuery alloc] initWithIGServerBaseURL:@"http://develop.smaryun.com:6163/igs" docName:@"WuHanEdit" mapID:0 layerID:8];

提示:服务基地址即IGServer服务器所在的IP地址,其中图层图层URL、地图文档名称、地图ID、图层ID可以在MapGIS Server Manager中获取,具体方法在在线数据组织模块已经介绍,在此不赘述。

实现方法

(1) 构造查询对象:根据不同的地图数据,选择不同的查询类(MGSFeatureQuery)构造函数,准备对应方法中的参数对象,然后构造查询对象。

(2) 设置查询条件:通过whereClause属性设置属性条件、queryBound属性设置空间范围条件,还可设置空间过滤条件、每页结果数目等参数。

(3) 查询并获取结果:通过MGSFeatureQuery对象调用query方法进行查询,返回查询结果集为MGSFeaturePagedResult。

(4) 结果展示:解析MGSFeaturePagedResult,将查询得到的结果要素MGSFeature进行展示,一般可通过高亮、标注、列表等形式展现,也可获取其几何、属性信息。

要素查询实现流程.png